home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf / tracker.library / Demos / File.asm < prev    next >
Assembly Source File  |  1994-01-09  |  8KB  |  281 lines

  1. ;TestProgramm für "tracker.library"
  2.  
  3. ; Testet TRK_Open, TRK_OpenFromLock und TRK_Close
  4.  
  5.         NOLIST
  6.         INCLUDE "exec/LVO.i"
  7.         INCLUDE "exec/memory.i"
  8.         INCLUDE "dos/LVO.i"
  9.         INCLUDE "dos/dosextens.i"
  10.         INCLUDE "tracker.i"
  11.         LIST
  12.  
  13. HEADLEN: EQU 32         ;soviel wird ausgegeben
  14.  
  15. Print:  MACRO
  16.         move.l  Output,d1
  17.         move.l  #\1,d2
  18.         CALLDOS VFPrintf
  19.         ENDM
  20.  
  21. _TrackerBase:   EQUR a5
  22. _DosBase:       EQUR a4
  23. Output:         EQUR d7
  24. Buffer:         EQUR a3
  25.  
  26. ; WB-Message ?
  27.         sub.l   a1,a1           ;a1=0->eigener Task
  28.         CALLEXEC FindTask       ;Wo darf man denn nachschauen ?
  29.         move.l  d0,a0
  30.         tst.l   pr_CLI(a0)      ;von CLI oder WB aus gestartet ?
  31.         bne     fromCLI
  32. ;von WB aus:
  33.         lea     pr_MsgPort(a0),a0
  34.         move.l  a0,-(sp)
  35.         CALLEXEC WaitPort       ;auf Start-Message warten
  36.         move.l  (sp)+,a0
  37.         CALLEXEC GetMsg ;muß nachher beantwortet werden
  38.         move.l  d0,WBenchMsg
  39.  
  40. fromCLI:
  41. ; Tracker-Library öffnen
  42.         OPENLIB TrName
  43.         tst.l   d0
  44.         beq     ende_all
  45.         move.l  d0,_TrackerBase
  46.         TRK_OPENSTDLIB DOS,36
  47.         tst.l   d0
  48.         beq     ende_trk
  49.         move.l  d0,_DosBase
  50.  
  51.         tst.l   WBenchMsg
  52.         bne     fromWB
  53. ;von CLI aus -> Ausgaben ins CLI-Fenster
  54.         CALLDOS Output
  55.         move.l  d0,Output
  56.         bra     main
  57. ;von WB aus gestartet -> eigenes Window nötig
  58. fromWB: move.l  #WdName,d1
  59.         move.l  #MODE_OLDFILE,d2
  60.         CALLTRK TRK_Open
  61.         move.l  d0,Output
  62. ;---------------------------------------------------------------------------
  63. ;Haupt-Testteil
  64.  
  65. OPEN:   MACRO   ;Name
  66.         move.l  #\1,d1
  67.         bsr     Open_File
  68.         ENDM
  69. LOPEN:  MACRO   ;Name
  70.         move.l  #\1,d1
  71.         bsr     Lock_Open
  72.         ENDM
  73. CLOSE:  MACRO   ;FileHandle
  74.         move.l  \1,d1
  75.         bsr     Close_File
  76.         ENDM
  77.  
  78. main:   move.l  #2*HEADLEN,d0
  79.         move.l  #MEMF_ANY,d1
  80.         CALLTRK TRK_AllocMem
  81.         tst.l   d0
  82.         beq     ende_main
  83.         move.l  d0,Buffer
  84.  
  85.         OPEN    FileName_1
  86.         LOPEN   FileName_1
  87.         bsr     Compare
  88.         LOPEN   FileName_2
  89.         move.l  d0,FH_2b
  90.         OPEN    FileName_2
  91.         move.l  d0,FH_2a
  92.         bsr     Compare
  93.         OPEN    FileName_3
  94.         move.l  d0,FH_3a
  95.         LOPEN   FileName_3
  96.         move.l  d0,FH_3b
  97.         bsr     Compare
  98.         CLOSE   FH_2a
  99.         CLOSE   FH_2b
  100.         LOPEN   FileName_4
  101.         OPEN    FileName_4
  102.         bsr     Compare
  103.         CLOSE   FH_3a
  104.         CLOSE   FH_3b
  105.         move.l  #CMD_List,d1
  106.         moveq   #0,d2
  107.         move.l  Output,d3
  108.         CALLDOS Execute
  109.         move.l  #FileName_5,d1
  110.         move.l  #MODE_NEWFILE,d2
  111.         CALLTRK TRK_Open
  112.         move.l  #CMD_List,d1
  113.         moveq   #0,d2
  114.         move.l  Output,d3
  115.         CALLDOS Execute
  116. ;---------------------------------------------------------------------------
  117.  
  118. ende_main:
  119. ;ggf. End-Botschaft und Verzögerung
  120.         tst.l   WBenchMsg
  121.         beq     ende_trk
  122.         move.l  Output,d1
  123.         move.l  #GoodBye,d2
  124.         moveq   #GoodByeLen,d3
  125.         CALLDOS Write
  126.         move.l  #150,d1
  127.         CALL    Delay
  128. ;Library schließen
  129. ende_trk:
  130.         CLOSELIB _TrackerBase
  131. ende_all:
  132.         tst.l   WBenchMsg       ;war da was ?
  133.         beq     toCLI           ;na dann halt nicht
  134. ;Message zur WB zurück
  135.         move.l  WBenchMsg,a1
  136.         CALLEXEC ReplyMsg
  137. toCLI:  moveq   #0,d0
  138.         rts
  139.  
  140. ;---------------------------------------------------------------------------
  141. ; Unterprogramm: File(Handle) d1 schließen
  142. ; Parameter: d1 = FileHandle-BPTR
  143. ; Ergebnis: -
  144.  
  145. Close_File:
  146.         tst.l   d1
  147.         bne     1$
  148.         rts
  149. 1$:     move.l  d1,-(sp)
  150.         CALLTRK TRK_Close
  151.         move.l  sp,d3
  152.         Print   CloseTxt
  153.         add.w   #4,sp
  154.         rts
  155. ;---------------------------------------------------------------------------
  156. ; Unterprogramm: File des Namens d1 öffnen und Anfang ausgeben
  157. ; Parameter: d1 = Adresse des Filenamens
  158. ;            Buffer = Zeiger auf Dateipuffer (Länge 2*HEADLEN)
  159. ; Ergebnis: der FileHandle (Flags korrekt !)
  160.  
  161. Open_File:
  162.         move.l  d1,-(sp)
  163.         move.l  #MODE_OLDFILE,d2
  164.         CALLTRK TRK_Open
  165.         tst.l   d0
  166.         bne     1$
  167. ;Datei nicht verfügbar !
  168.         move.l  sp,d3
  169.         Print   not_existant
  170.         addq.l  #4,sp
  171.         moveq   #0,d0
  172.         rts
  173.  
  174. ;Datei geöffnet
  175. 1$:     move.l  sp,d3
  176.         move.l  d0,-(sp)
  177.         Print   existant
  178.         move.l  (sp)+,d1
  179. ;Dateianfang lesen
  180.         move.l  d1,(sp)         ;Namen gegen FileHandle tauschen !
  181.         move.l  Buffer,d2
  182.         move.l  #HEADLEN,d3
  183.         CALL    Read
  184.         move.l  d0,-(sp)
  185.         move.l  sp,d3
  186.         Print   ReadNN
  187.         move.l  Output,d1
  188.         move.l  Buffer,d2
  189.         move.l  (sp)+,d3
  190.         CALL    Write
  191.         Print   CrLf
  192.         move.l  (sp)+,d0
  193.         rts
  194. ;---------------------------------------------------------------------------
  195. ; Unterprogramm: File des Namens d1 via Lock öffnen
  196. ; Parameter: d1 = Adresse des Filenamens
  197. ;            Buffer = Zeiger auf Dateipuffer (Länge 2*HEADLEN)
  198. ; Ergebnis: der FileHandle (Flags korrekt !)
  199.  
  200. Lock_Open:
  201.         move.l  #ACCESS_READ,d2
  202.         CALLTRK TRK_Lock                ;sollte auch mit CALLDOS Lock laufen !
  203.                                         ;(es sei denn, eine der Dateien ist
  204.                                         ; nicht auffindbar)
  205.         tst.l   d0
  206.         beq     2$                      ;Datei nicht verfügbar ?
  207. ;Lock eröffnet
  208.         move.l  d0,-(sp)
  209.         move.l  sp,d3
  210.         move.l  (sp)+,d0
  211.         move.l  d0,d1
  212.         CALLTRK TRK_OpenFromLock
  213.         move.l  d0,-(sp)
  214.         move.l  sp,d3
  215.         move.l  (sp)+,d0
  216.         tst.l   d0
  217.         beq     2$
  218. ;Kopf einlesen:
  219.         move.l  d0,-(sp)
  220.         move.l  d0,d1
  221.         moveq   #HEADLEN,d3
  222.         move.l  Buffer,d2
  223.         add.l   d3,d2
  224.         CALLDOS Read
  225.         move.l  d0,-(sp)
  226.         move.l  sp,d3
  227.         Print   ReadNN
  228.         move.l  Output,d1
  229.         move.l  Buffer,d2
  230.         move.l  (sp)+,d3
  231.         CALL    Write
  232.         Print   CrLf
  233.         move.l  (sp)+,d0
  234.         move.l  (sp)+,d0
  235. 2$:     rts
  236. ;---------------------------------------------------------------------------
  237. ; Unterprogramm: die gelesenen Anfänge der beiden Dateien miteinander
  238. ; vergleichen
  239. ; Parameter: - ; Ergebnis: -
  240.  
  241. Compare: move.l Buffer,a0
  242.         moveq   #HEADLEN,d0
  243.         move.l  d0,a1
  244.         add.l   a0,a1
  245.         subq.w  #1,d0
  246. 1$:     cmp.b   (a0)+,(a1)+
  247.         bne     2$
  248.         dbra    d0,1$
  249.         Print   Equal_Text
  250.         rts
  251. 2$:     Print   Differ_Text
  252.         rts
  253. ;---------------------------------------------------------------------------
  254. WBenchMsg:      dc.l 0
  255. FH_2a:          dc.l 0
  256. FH_2b:          dc.l 0
  257. FH_3a:          dc.l 0
  258. FH_3b:          dc.l 0
  259.  
  260. TrName: TRACKERNAME
  261.  
  262. WdName:         dc.b "CON:0/0/640/200/File-Test für tracker.library",0
  263. GoodBye:        dc.b 10,"Bye - closing soon !"
  264. GoodByeLen:     equ *-GoodBye
  265. FileName_1:     dc.b "s:Startup-Sequence",0
  266. FileName_2:     dc.b "devs:mountlist",0
  267. FileName_3:     dc.b "lib-dos.asm",0
  268. FileName_4:     dc.b "tracker.i",0
  269. FileName_5:     dc.b "RAM:dmmy",0
  270. not_existant:   dc.b "Datei %s kann nicht geöffnet werden !",10,0
  271. existant:       dc.b "Datei %s geöffnet"
  272. CrLf:           dc.b 10,0
  273. CloseTxt:       dc.b "Datei mit FileHandle-BPTR $%06lx geschloßen",10,0
  274. ReadNN:         dc.b "%ld Bytes gelesen: ",10,0
  275. CMD_List:       dc.b "list RAM:d#?",0
  276. Equal_Text:     dc.b "The two files opened via TRK_Open / TRK_Lock & TRK_OpenFromLock",10
  277.                 dc.b "seem to be the same.",10,0
  278. Differ_Text:    dc.b "The two files opened via TRK_Open / TRK_Lock & TRK_OpenFromLock differ",10,0
  279.  
  280.         END
  281.